package com.tensai.study.新概念.函数式编程.completableFuture;

import java.util.concurrent.CompletableFuture;

/**
 * 当前阶段正常完成以后执行，而且当前阶段的执行的结果会作为下一阶段的输入参数。
 * thenApplyAsync默认是异步执行的。这里所谓的异步指的是不在当前线程内执行。
 * thenApply相当于回调函数（callback）
 *
 * @author Tensai
 */
public class ThenApply {

    public static void main(String[] args) {
        thenApply0();
        thenApply1();
    }


    private static void thenApply0(){
        CompletableFuture.supplyAsync(()->1)
                .thenApply(i->i+1)
                .thenApply(i->i*i)
                .whenComplete((r,e)-> System.out.println(r));
    }

    private static void thenApply1(){
        CompletableFuture.supplyAsync(()->"Hello")
                .thenApply(s -> s + " World")
                .thenApply(String::toUpperCase);
    }
}
